grammar SimpleTree;

// Parser rules
parse : value EOF ;

value : stringLiteral
      | object
      | collection
      ;

stringLiteral : STRING;
label: STRING;
object : label ':' collection ;

collection : '[' elements ']' ;

elements : value (',' value)* ;

// Lexer rules
STRING
    : '"' (ESC | SAFECODEPOINT)* '"'
    ;

fragment ESC
    : '\\' (["\\/bfnrt] | UNICODE)
    ;

fragment UNICODE
    : 'u' HEX HEX HEX HEX
    ;

fragment HEX
    : [0-9a-fA-F]
    ;

fragment SAFECODEPOINT
    : ~ ["\\\u0000-\u001F]
    ;
WS : [ \t\r\n]+ -> skip ;
